package view;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import Controller.*;

import view.Accueil.CenterPanel;
import view.Accueil.RightPanel;
import view.Accueil.UpPanel;

@SuppressWarnings("serial")
public class Fenetre extends JFrame {

	public static Fenetre fen;		// Objet Fenetre
	private UpPanel up;				// Panneau de titre
	private CenterPanel center;		// Panneau de presentation du logiciel
	private RightPanel right;		// Panneau de connexion/inscription

	public static MainController control; 

	public Fenetre(MainController control) {

		Fenetre.control = control;
		fen = this;

		this.setTitle("Clever english"); // Titre de la fenetre
		this.setDefaultCloseOperation(EXIT_ON_CLOSE); // Arret complet de l'application apres fermeture de la fenetre

		// Resolution de l'ecran avec une marge pour voir la console en bas
		int screen_width = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		int screen_height = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 100;

		this.setSize(screen_width, screen_height); // Taille de la fenetre

		// Affichage de la fenetre
		this.setContentPane(new ContentPanel()); // Affichage du fond d'ecran
		this.setVisible(true); // Pour afficher la fenetre

		refresh(); // Initialisation et ajout des conteneurs

	}

	/**Affiche la page d'accueil principale.**/
	public void refresh() {

		// Agencement des conteneurs
		GridBagConstraints constraint = new GridBagConstraints();
		this.setLayout(new GridBagLayout());

		// Creation des conteneurs
		up = new UpPanel();
		center = new CenterPanel();
		right = new RightPanel();


		// CONTRAINTE DU PANNEAU DE TITRE

		constraint.gridx = 1;
		constraint.gridy = 0;

		constraint.weightx = 1.0;
		constraint.weighty = GridBagConstraints.NONE;

		constraint.gridwidth = GridBagConstraints.REMAINDER;
		constraint.gridheight = 5;

		constraint.fill = GridBagConstraints.BOTH;

		this.add(up, constraint);


		// CONTRAINTE DU PANNEAU DE PRESENTATION

		constraint.gridy = 5;

		constraint.weightx = 0.6;
		constraint.weighty = 0.95;

		constraint.gridwidth = 60;
		constraint.gridheight = 95;

		constraint.fill = GridBagConstraints.BOTH;

		this.add(center, constraint);


		// CONTRAINTE DU PANNEAU DE CONNEXION/INSCRIPTION

		constraint.gridx = 61;

		constraint.weightx = 0.4;

		constraint.gridwidth = 40;

		constraint.fill = GridBagConstraints.BOTH;

		this.add(right, constraint);

		// FIN DES CONTRAINTES


		// Focus automatique sur le nom d'utilisateur
		right.getLog().getFocus().requestFocus();

		// Validation des conteneurs pour mettre a jour la fenetre
		this.validate();

	}

	/**Vide la page d'accueil principale.**/
	public void erase() {

		// Suppresion des conteneurs
		this.remove(up);
		this.remove(center);
		this.remove(right);

		// Validation des conteneurs pour mettre a jour la fenetre
		this.validate();

	}

	public static void main(String[] args) {

		MainController control = new MainController();

		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
			//on passe au UIManager le nom complet de la classe du Look and Feel
			//naturellement, celle-ci doit etre disponible dans le CLASSPATH
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}

		new Fenetre(control);

	}

}

/*
Metal
javax.swing.plaf.metal.MetalLookAndFeel
Nimbus
com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
CDE/Motif
com.sun.java.swing.plaf.motif.MotifLookAndFeel
GTK+
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
 */